package geym.conc.ch3.jmh.test;

import geym.conc.ch3.jmh.JMHSample_01_HelloWorld;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.BenchmarkMode;
import org.openjdk.jmh.annotations.Mode;
import org.openjdk.jmh.annotations.OutputTimeUnit;
import org.openjdk.jmh.runner.Runner;
import org.openjdk.jmh.runner.RunnerException;
import org.openjdk.jmh.runner.options.Options;
import org.openjdk.jmh.runner.options.OptionsBuilder;
import org.openjdk.jmh.runner.options.TimeValue;

import java.util.concurrent.TimeUnit;

/**
 * @author 28336
 * @version 1.0
 * Create by 2024/2/21 8:57
 */
public class MyBenchmark {

    @Benchmark
    @BenchmarkMode(Mode.Throughput) //2596626753
    @OutputTimeUnit(TimeUnit.SECONDS) //输出结果单位，这里是按秒输出
    public void testMethod(){
        int a = 1;
        int b = 2;
        int sum  = a + b;
    }

    public static void main(String[] args) throws RunnerException {
        Options opt = new OptionsBuilder()
                .include(MyBenchmark.class.getSimpleName())
                .warmupIterations(3)
                .warmupTime(TimeValue.seconds(1))// 预热3次 每次1秒。 JVM该加载的玩意都加载
                .measurementIterations(20) //默认就是20次
                .forks(1) //本例介绍了 @Fork 注解，@Fork 可以指定代码运行时是否需要 fork 出一个JVM进程，如果在同一个JVM中测试则会相互影响，一般fork进程设置为1。
                .build();
        new Runner(opt).run();
    }
}
